草庐IT

C++ STL : Custom sorting one vector based on contents of another

全部标签

c++ - 为什么这个 C++ STL 分配器不分配?

我正在尝试编写一个从std::allocator派生的自定义STL分配器,但不知何故,所有对allocate()的调用都转到了基类。我已将其缩小到以下代码:templateclassa:publicstd::allocator{public:T*allocate(size_tn,constvoid*hint=0)const{cout>v(1000,42);return0;}我期待“哟!”打印出来,然后是一些可怕的错误,因为我实际上并没有分配任何东西。相反,该程序运行良好并且什么也不打印。我做错了什么?我在gcc和VS2008中得到相同的结果。 最佳答案

c++ - VC++ 允许对 STL 容器使用 const 类型。为什么?

STL容器要求存储的值是可复制构造和可分配的。constT显然不是任何T的可分配类型,但我尝试使用它(只是好奇)并发现它可以编译,而且表现得像可分配类型。vectorv(1);v[0]=17;这在VisualStudio2008中成功运行并将v[0]分配给17。 最佳答案 这不是其他人建议的实现中的错误。违反C++标准库设施的要求不会使您的程序格式错误,它会产生未定义的行为。您违反了存储在容器中的值类型必须是可复制构造和可分配的要求(显然,const类型不可分配),因此您的程序表现出未定义的行为。C++标准中适用的语言可以在C++0

c++ - 需要按插入顺序设置 STL

如何按插入顺序将元素存储在集合中。例如。setmyset;myset.insert("stack");myset.insert("overflow");如果你打印,输出是overflowstack需要的输出:stackoverflow 最佳答案 一种方法是使用两个容器,一个std::deque以插入顺序存储元素,另一个std::set确保没有重复。插入元素时,先检查是否在set中,如果是则丢弃;如果不存在,请将其同时插入deque和set。一个常见的场景是先插入所有元素,然后处理(不再插入),如果是这种情况,set可以在插入处理后释

c++ - typedef 复杂 STL 映射时的命名约定是什么?

1)typedef'ing时实际使用的约定是什么类似typedefstd::map[SomeStandardName>]typedefstd::map>2)你通常把typedef:全局头文件放在类的地方吗?3)你是typedef迭代器还是constmap版本?4)假设您有两个不同概念使用的映射,您是否为它们创建了两个单独的typedef?typedefmapIDToSomeClassMap;typedefmapDescriptionToSomeClassMap;谢谢编辑#1我对typedefSTL映射特别感兴趣,例如typedefmapIdToDescriptionMap或typede

C++ STL数据结构对齐,算法向量化

有没有办法强制STL容器对齐到特定字节,也许使用attribute((aligned))?目标编译器不是MicrosoftVisualC++。哪些库(如果有)提供具有特定显式矢量化的STL算法的专用模板,例如上证所。我感兴趣的编译器是g++、Intel和IBMXL。 最佳答案 使用STL容器,您可以通过可选的模板参数提供自己的分配器。我不建议从头开始编写整个分配器,但您可以编写一个只是new和delete的包装器,但要确保返回的内存满足您的对齐要求。(例如,如果您需要n字节对齐16字节,则使用new分配n+15字节并返回指向该blo

c++ - 在 gdb 中显示取消引用的 STL 迭代器

我有一个映射元素的迭代器,我希望gdb向我显示该迭代器的“第一个”和“第二个”元素的值。例如:std::mapaMap;...fillmap...std::map::const_iteratorp=aMap.begin();我可以在代码中使用p.first和p.second,但在gdb中看不到它们。对于它的值(value),在dbx中可以执行“printp.node.second_”之类的操作,但我可以在gbd中找到类似的内容。我完全愿意有一个函数来传递对象类型,但我也无法让它工作。有什么想法吗?谢谢! 最佳答案 这是我的做法:Th

c++ - 引用计数指针的 STL 类?

这应该是微不足道的,但我似乎找不到它(除非不存在这样的类!)智能指针的STL类(或类集)是什么?更新感谢您的回复,我必须说我很惊讶没有标准的实现。我最终使用了这个:http://archive.gamedev.net/reference/articles/article1060.asp 最佳答案 除了已经提到的TR1shared_ptr之外,STL中没有引用计数指针。我建议你使用boost::shared_ptr(下载boost就足够了,没有什么要编译的,它的实现是header-only)。您可能还想看看Loki库中的智能指针(同样

c++ - 原始 STL 与最终出现在 C++ 标准库中的那些部分之间的具体区别是什么?

我想知道SGI发布的STL之间的具体区别是什么和ISOC++标准库。由thisquestion提示thisquestion根本没有回答.一些差异是显而易见的,例如从未将其纳入标准的slist和hash_set类。我也在寻找更细微的差异,例如方法的返回值/参数差异,或不同的复杂性要求,或不同的迭代器失效条件。 最佳答案 C++标准中“缺失”的SGISTL内容包括slistbit_vectorhash_set、hash_map、hash_multiset、hash_multimap以及与哈希函数相关的所有内容ropeiotalexico

c++ - 如何将数组存储在 STL 列表中?

使用C++和STL,有人知道如何将整数数组作为节点存储在STL列表或vector中吗?我需要存储未知数量的数字对,并且来自其他语言,我的第一个想法是使用某种类似列表或vector的数据结构......但我遇到了一些麻烦。我100%确定我犯了一个明显的初学者C++错误,并且真正了解该语言的人会看一看我正在尝试做的事情并能够纠正我。所以,这就是我尝试过的。像这样声明一个列表是可行的:stl::listmy_list;然后我可以轻松地制作一个二元素数组,如下所示:intfoo[2]={1,2};这编译并运行得很好。但是,一旦我尝试将foo添加到我的列表中,就像这样:my_list.push_

STL - STL count_if 的标准谓词

我正在使用STL函数count_if来计算所有正值在doublevector中。例如我的代码是这样的:vectorArray(1,1.0)Array.push_back(-1.0);Array.push_back(1.0);cout其中函数isPositive定义为boolisPositive(doublex){return(x>0);}以下代码将返回2。有没有办法做到以上几点不写我自己的函数isPositive?有没有内置的我可以使用的功能?谢谢! 最佳答案 std::count_if(v.begin(),v.end(),std: